package com.spring.utils.api_v4.controller.ui;

import cn.hutool.core.util.IdcardUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.spring.utils.api_v4.pojo.DeptInfo;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.time.LocalDate;

@Getter
@Setter
@ToString
public class UserItem {
    private String id;

    @NotNull(message = "请选择用户所在部门")
    private Integer deptId;             // 部门id
    @JsonIgnore
    private DeptInfo dept;              // 所属部门
    private boolean hasWage = true;     // 是否计算工资

    @NotEmpty(message = "姓名不能为空")
    private String name;            // 姓名
    @Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$",message = "身份证格式不正确")
    private String idCard;          // 身份证号码
    @Pattern(regexp = "0?(13|14|15|17|18|19)[0-9]{9}", message = "手机号格式不正确")
    private String phone;           // 电话号码
    @NotEmpty(message = "民族不能为空")
    private String ethic;           // 民族
    @NotEmpty(message = "政治面貌不能为空")
    private String politic;         // 政治面貌

    // 教育经历
    private String rawEduExp;       // 初始学历
    private String topEduExp;       // 最高学历
    private LocalDate graduationTime;    // 毕业时间
    private String graduateSchool;  // 毕业学校
    private String major;           // 所学专业
    private String degree;          // 学位

    // 职务信息
    private String position;        // 岗位职务
    @NotEmpty(message = "原始身份不能为空")
    private String rawRole;         // 原始身份
    private String roleType;        // 人员类别
    private String managePosition;  // 管理职务
    private LocalDate manageApTime;      // 管理职务聘任时间
    private String techPosition;    // 专业技术职务
    private LocalDate techApTime;        // 专业技术职务聘任时间
    private String skillLevel;      // 工勤技能等级
    private LocalDate skillApTime;       // 工勤技能等级聘任时间

    // 其他信息
    private LocalDate joinWorkTime;      // 参加工作时间
    private LocalDate workTime;          // 来校时间
    private String contractPeriod;      // 合同期限
    private LocalDate[] contractDate;    // 合同起止日期

    public Integer getDeptId() {
        if(dept != null) {
            deptId = dept.getId();
        }
        return deptId;
    }

    public int getAge() {
        return IdcardUtil.getAgeByIdCard(idCard);
    }

    public String getSex() {
        return IdcardUtil.getGenderByIdCard(id) % 2 == 0 ? "男" : "女";
    }
}
